package cn.cttic.order.service;

import cn.cttic.order.api.domain.bo.BaseInstallOrderQueryBo;
import cn.cttic.order.api.domain.bo.ReviewOrderBo;
import cn.cttic.order.api.domain.bo.VerifyOrderBo;
import cn.cttic.order.api.domain.vo.BaseInstallOrderVo;
import cn.cttic.order.api.domain.bo.BaseInstallOrderBo;
import cn.cttic.common.mybatis.core.page.TableDataInfo;
import cn.cttic.common.mybatis.core.page.PageQuery;
import cn.cttic.order.api.domain.vo.InstallOrderVerifyInfoVo;
import cn.cttic.order.api.domain.vo.InstallOrderVerifyVo;
import cn.cttic.order.api.domain.vo.SaleOrderVerifyInfoVo;

import java.util.Collection;
import java.util.List;

/**
 * 安装订单Service接口
 *
 * @author Times.Studio
 * @date 2024-09-17
 */
public interface IBaseInstallOrderService {

    /**
     * 查询安装订单
     *
     * @param id 主键
     * @return 安装订单
     */
    BaseInstallOrderVo queryById(String id);

    /**
     * 查询订单验收详情
     * @param id 订单ID
     * @return
     */
    InstallOrderVerifyVo queryVerifyDetailById(String id);

    /**
     * 查询安装订单信息
     *
     * @param id 主键
     * @return 安装订单
     */
    BaseInstallOrderVo getInstallOrderInfoById(String id);

    /**
     * 查询验收安装信息
     * @param id 安装订单ID
     * @return
     */
    InstallOrderVerifyInfoVo queryInstallVerifyInfoByInstallOrderId(String id);

    /**
     * 查询验收销售信息
     * @param id 安装订单ID
     * @return
     */
    SaleOrderVerifyInfoVo querySaleVerifyInfoByInstallOrderId(String id);

    /**
     * 分页查询安装订单列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 安装订单分页列表
     */
    TableDataInfo<BaseInstallOrderVo> queryPageList(BaseInstallOrderQueryBo bo, PageQuery pageQuery);

    /**
     * 签收订单（订单验收）
     *
     * @param orderId 订单ID
     * @return
     */
    BaseInstallOrderVo receiveInstalledOrder(String orderId);

    /**
     * 验收订单
     * @param bo 业务参数
     * @return
     */
    BaseInstallOrderVo verifyOrder(VerifyOrderBo bo);

    /**
     * 签收订单（订单质控）
     * @param orderId 订单ID
     * @return
     */
    BaseInstallOrderVo receiveVerifiedOrder(String orderId);

    /**
     * 复核订单
     * @param bo 订单质控信息
     * @return
     */
    BaseInstallOrderVo reviewVerifiedOrder(ReviewOrderBo bo);


    BaseInstallOrderVo checkOrder(VerifyOrderBo bo);

    BaseInstallOrderVo resetOrder(String orderId);

    /**
     * 分页查询安装订单列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 安装订单分页列表
     */
    public TableDataInfo<BaseInstallOrderVo> queryInstalledPageList(BaseInstallOrderQueryBo bo, PageQuery pageQuery);

    /**
     * 分页查询安装订单列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 安装订单分页列表
     */
    public TableDataInfo<BaseInstallOrderVo> queryReceivedPageList(BaseInstallOrderQueryBo bo, PageQuery pageQuery);

    /**
     * 分页查询已经验收的安装订单列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 安装订单分页列表
     */
    public TableDataInfo<BaseInstallOrderVo> queryVerifiedPageList(BaseInstallOrderQueryBo bo, PageQuery pageQuery);

    /**
     * 分页查询已经验收的安装订单列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 安装订单分页列表
     */
    public TableDataInfo<BaseInstallOrderVo> queryReceived4ReviewPageList(BaseInstallOrderQueryBo bo, PageQuery pageQuery);

    /**
     * 分页查询安装订单列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 安装订单分页列表
     */
    public TableDataInfo<BaseInstallOrderVo> queryCheckPageList(BaseInstallOrderQueryBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的安装订单列表
     *
     * @param bo 查询条件
     * @return 安装订单列表
     */
    List<BaseInstallOrderVo> queryList(BaseInstallOrderQueryBo bo);

    /**
     * 新增安装订单
     *
     * @param bo 安装订单
     * @return 是否新增成功
     */
    Boolean insertByBo(BaseInstallOrderBo bo);

    /**
     * 修改安装订单
     *
     * @param bo 安装订单
     * @return 是否修改成功
     */
    Boolean updateByBo(BaseInstallOrderBo bo);

    /**
     * 校验并批量删除安装订单信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
}
